package cn.iocoder.yudao.module.reading.enums.common;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 删除状态枚举
 * 
 * @author 李晨
 */
@Getter
@AllArgsConstructor
public enum DeleteStatusEnum {

    /**
     * 正常状态
     */
    NORMAL(0, "正常"),

    /**
     * 软删除（移入回收站）
     */
    SOFT_DELETED(1, "软删除"),

    /**
     * 硬删除（彻底删除）
     */
    HARD_DELETED(2, "硬删除");

    /**
     * 状态码
     */
    private final Integer code;

    /**
     * 状态描述
     */
    private final String description;

    /**
     * 根据状态码获取枚举
     *
     * @param code 状态码
     * @return 删除状态枚举
     */
    public static DeleteStatusEnum getByCode(Integer code) {
        if (code == null) {
            return NORMAL;
        }
        
        for (DeleteStatusEnum status : values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        return NORMAL;
    }

    /**
     * 判断是否为正常状态
     *
     * @param code 状态码
     * @return 是否为正常状态
     */
    public static boolean isNormal(Integer code) {
        return NORMAL.getCode().equals(code);
    }

    /**
     * 判断是否为软删除状态
     *
     * @param code 状态码
     * @return 是否为软删除状态
     */
    public static boolean isSoftDeleted(Integer code) {
        return SOFT_DELETED.getCode().equals(code);
    }

    /**
     * 判断是否为硬删除状态
     *
     * @param code 状态码
     * @return 是否为硬删除状态
     */
    public static boolean isHardDeleted(Integer code) {
        return HARD_DELETED.getCode().equals(code);
    }

    /**
     * 判断是否已删除（软删除或硬删除）
     *
     * @param code 状态码
     * @return 是否已删除
     */
    public static boolean isDeleted(Integer code) {
        return isSoftDeleted(code) || isHardDeleted(code);
    }
}
